11.3 オブジェクトテーブル
ポインタそのものを持つよりも、オブジェクトへのハンドラとマッピング機構を通じて行うもの。
オブジェクト群のスペースが大きい場合や、永続的なオブジェクトを扱う際に役立つ。
一方ハードウェアの持つアドレス空間は比較的小さい。
そういう場合でも一部の場合ではオブジェクトテーブルがハマると有益。
オブジェクトテーブル
オブジェクトを参照する小さなレコードからなる密な配列。
エントリは、オブジェクトへのデータへのポインタに加えて、なんらかのステータスを含むことがある。
オブジェクトへの参照(ポインタそのもののかわりに渡されるもの)はオブジェクトテーブルのインデックスか、エントリへのポインタ。
利点
単純な圧縮が許されること。圧縮GCが簡単になると言いたい?
これ何? エントリの圧縮は簡単でないとおもうので、データの圧縮?(これができるのは明らか)
オブジェクトを移動させた時に、テーブルの更新だけで済む。
オブジェクトのデータにエントリへのポインタを持たせるとこれが楽。
マークビットをオブジェクトテーブルエントリに置くとメモリ参照効率が良い。
3.1節のツーフィンガーアルゴリズムでテーブルの圧縮をすることもできる。
これが1つめの利点か??
オブジェクトデータの圧縮と同じパスで行える。
欠点
11.4節で議論するように、エントリとハンドルの類似性にも留意
ハンドル: 外部コードからの参照をサポートするのに利用。
Smalltalkのbecome:
??
オブジェクトテーブルのエントリのswapで実装できるらしい。
特定のオブジェクトへの参照先を全部新たなオブジェクトで置き換えるみたいな命令……?